package com.aididi.utils;

import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import com.aididi.entity.SysAuth;

import java.util.List;

/**
 * @Auther: zx.xu
 * @Description:
 */
public class TreeNodeUtils {

    public static List<Tree<String>> TreeNode(List<SysAuth> menus){
        // 自定义属性名
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        treeNodeConfig.setWeightKey("orderNum"); // 权重排序字段 默认为weight
        treeNodeConfig.setIdKey("id"); // 默认为id可以不设置
        treeNodeConfig.setNameKey("name"); // 节点名对应名称 默认为name
        treeNodeConfig.setParentIdKey("parentId"); // 父节点 默认为parentId
        treeNodeConfig.setChildrenKey("children"); // 子点 默认为children
        treeNodeConfig.setDeep(4); // 可以配置递归深度 从0开始计算 默认此配置为空,即不限制
        //转换器 "0" - 最顶层父id值 一般为0之类  nodeList – 源数据集合
        List<Tree<String>> treeNodes = TreeUtil.build(menus, "0", treeNodeConfig,
                // treeNode – 源数据实体
                // tree – 树节点实体
                (treeNode, tree) -> {
                    tree.setId(treeNode.getId().toString());
                    tree.setParentId(treeNode.getParentId().toString());
                    tree.setWeight(treeNode.getOrderNum());
                    tree.setName(treeNode.getName());
                    // 扩展属性 ...
                    tree.putExtra("permission", treeNode.getPermission());
                });
        return treeNodes;
    }
}
